package com.example.lettcode._202412._20241212;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*
389. 找不同
给定两个字符串 s 和 t ，它们只包含小写字母。
字符串 t 由字符串 s 随机重排，然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。

示例 1：
输入：s = "abcd", t = "abcde"
输出："e"
解释：'e' 是那个被添加的字母。

示例 2：
输入：s = "", t = "y"
输出："y"

提示：
0 <= s.length <= 1000
t.length == s.length + 1
s 和 t 只包含小写字母
 */
public class _389_zhao_bu_tong {

    public static void main(String[] args) {
        String s = "abcd", t = "abcde";
        char theDifference = findTheDifference3(s, t);
        System.out.println(theDifference);
    }

    public static char findTheDifference(String s, String t) {
        int[] ints = new int[26];

        char[] tChars = t.toCharArray();
        for (int i = 0; i < tChars.length; i++) {
            ints[tChars[i] - 'a']++;
        }

        char[] sChars = s.toCharArray();
        for (int i = 0; i < sChars.length; i++) {
            ints[sChars[i] - 'a']--;
        }

        for (int i = 0; i < tChars.length; i++) {
            if (ints[tChars[i]-'a'] == 1) {
                return tChars[i];
            }
        }
        return '0';
    }


    public static char findTheDifference2(String s, String t) {
        Map<Character, Integer> map = new HashMap<>();

        char[] tChars = t.toCharArray();
        for (int i = 0; i < tChars.length; i++) {
            char tChar = tChars[i];
            if (map.containsKey(tChar)) {
                map.put(tChar, map.get(tChar)+1);
            } else {
                map.put(tChar, 1);
            }
        }

        char[] sChars = s.toCharArray();
        for (int i = 0; i < sChars.length; i++) {
            char sChar = sChars[i];
            if (map.containsKey(sChar)) {
                map.put(sChar, map.get(sChar)-1);
                if (map.get(sChar) == 0) {
                    map.remove(sChar);
                }
            }
        }
        return map.keySet().stream().findFirst().get();
    }

    public static char findTheDifference3(String s, String t) {
        int[] ints = new int[26];

        char[] sChars = s.toCharArray();
        for (int i = 0; i < sChars.length; i++) {
            ints[sChars[i] - 'a']++;
        }

        char[] tChars = t.toCharArray();
        for (int i = 0; i < tChars.length; i++) {
            ints[tChars[i] - 'a'] -= 1;
            if (ints[tChars[i] - 'a'] < 0) {
                return tChars[i];
            }
        }

        return '0';
    }
}
